【I2C】基于Linux移植i2c

您所在的位置:网站首页 linux i2c从设备驱动 【I2C】基于Linux移植i2c

【I2C】基于Linux移植i2c

2024-07-09 21:15:53| 来源: 网络整理| 查看: 265

文章目录 1. 下载i2c-tool工具2. 编译i2c-tool源码3. i2cdetect的用法4. i2cdump的用法5. i2cget的用法6. i2cset的用法7. i2ctransfer的用法

1. 下载i2c-tool工具

i2c-tool工具下载地址: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ 在这里插入图片描述

2. 编译i2c-tool源码

因为我这里需要将i2c-tool移植到imx6ull嵌入式平台,所以编译时肯定需要重新指定GCC。查看i2c-tool根目录下的Makefile文件,默认为系统GCC工具编译:

CC ?= gcc AR ?= ar STRIP ?= strip

在ubuntu编译i2c-tool源码之前,首先设置imx6ull嵌入式平台的交叉工具链,可以直接在命令行输入如下命令:

export ARCH=arm export CROSS_COMPILE=arm-none-linux-gnueabihf- export PATH=$PATH:/opt/ToolChain/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin

在make时指定GCC即可:

make CC=arm-none-linux-gnueabihf-gcc AR=arm-none-linux-gnueabihf-ar STRIP=arm-none-linux-gnueabihf-strip USE_STATIC_LIB=1

添加USE_STATIC_LIB=1是为了静态编译,因为默认为动态编译,运行程序时还需要拷贝libi2c.so。

3. i2cdetect的用法

i2cdetect命令的使用方法:

# ./i2cdetect Error: No i2c-bus specified! Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST] i2cdetect -F I2CBUS i2cdetect -l I2CBUS is an integer or an I2C bus name If provided, FIRST and LAST limit the probing range.

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。 -y:默认输入yes,不再询问用户确认。

列出I2C所有总线 命令如下:

./i2cdetect -l

输出结果如下: 在这里插入图片描述

列出I2Cx总线上所有的设备 命令如下:

./i2cdetect -y -a 4

输出结果如下: 在这里插入图片描述

--表示没有该地址对应的设备, UU表示有该设备并且它已经有驱动程序, 数值表示有该设备但是没有对应的设备驱动

4. i2cdump的用法

i2cdump命令的使用方法:

# ./i2cdump Error: No i2c-bus specified! Usage: i2cdump [-f] [-y] [-r first-last] [-a] I2CBUS ADDRESS [MODE [BANK [BANKREG]]] I2CBUS is an integer or an I2C bus name ADDRESS is an integer (0x08 - 0x77, or 0x00 - 0x7f if -a is given) MODE is one of: b (byte, default) w (word) W (word on even register addresses) s (SMBus block, deprecated) i (I2C block) c (consecutive byte) Append p for SMBus PEC

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。 -y:默认输入yes,不再询问用户确认。

显示I2C总线上社保的寄存器值 显示I2C 4号总线上0x30设备的寄存器值,MODE为byte,命令如下:./i2cdump -f -y 4 0x30 b 输出结果如下: 在这里插入图片描述 5. i2cget的用法

i2cget命令的使用方法:

# ./i2cget Usage: i2cget [-f] [-y] [-a] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE [LENGTH]]] I2CBUS is an integer or an I2C bus name ADDRESS is an integer (0x08 - 0x77, or 0x00 - 0x7f if -a is given) MODE is one of: b (read byte data, default) w (read word data) c (write byte/read byte) s (read SMBus block data) i (read I2C block data) Append p for SMBus PEC LENGTH is the I2C block data length (between 1 and 32, default 32)

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。 -y:默认输入yes,不再询问用户确认。

从某个寄存器里面读取一个byte数据 从i2c总线4上的0x30设备读取寄存器0x85的值,大小为1byte。默认模式的为b,这里可以省略。命令如下:i2cget -f -y 4 0x30 0x85 从某个寄存器里面读取一个word数据 从i2c总线4上的0x30设备读取寄存器0x85的值,大小为1word(1word = 2byte)。命令如下:i2cget -f -y 4 0x30 0x85 w 6. i2cset的用法

i2cset命令的使用方法:

# ./i2cset Usage: i2cset [-f] [-y] [-m MASK] [-r] [-a] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE] I2CBUS is an integer or an I2C bus name ADDRESS is an integer (0x08 - 0x77, or 0x00 - 0x7f if -a is given) MODE is one of: c (byte, no value) b (byte data, default) w (word data) i (I2C block data) s (SMBus block data) Append p for SMBus PEC

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。 -y:默认输入yes,不再询问用户确认。

往某个寄存器里面写入一个byte数据 往i2c总线4上的0x30设备寄存器0x85写入0x23,大小为1byte。默认模式的为b,这里可以省略。命令如下:i2cget -f -y 4 0x30 0x85 0x23 往某个寄存器里面写入一个word数据 往i2c总线4上的0x30设备读取寄存器0x85写入0x2345,大小为1word(1word = 2byte)。命令如下:./i2cset -f -y 4 0x30 0x85 0x2345 w 7. i2ctransfer的用法

i2cget和i2cset命令使用的是SMBus协议,i2ctransfer命令使用的是I2C协议。SMBus是基于I2C协议的,SMBus要求更严格,SMBus是I2C协议的子集。

i2ctransfer使用方法如下:

# ./i2ctransfer Usage: i2ctransfer [-f] [-y] [-v] [-V] [-a] I2CBUS DESC [DATA] [DESC [DATA]]... I2CBUS is an integer or an I2C bus name DESC describes the transfer in the form: {r|w}LENGTH[@address] 1) read/write-flag 2) LENGTH (range 0-65535, or '?') 3) I2C address (use last one if omitted) DATA are LENGTH bytes for a write message. They can be shortened by a suffix: = (keep value constant until LENGTH) + (increase value by 1 until LENGTH) - (decrease value by 1 until LENGTH) p (use pseudo random generator until LENGTH with value as seed) Example (bus 0, read 8 byte at offset 0x64 from EEPROM at 0x50): # i2ctransfer 0 w1@0x50 0x64 r8 Example (same EEPROM, at offset 0x42 write 0xff 0xfe ... 0xf0): # i2ctransfer 0 w17@0x50 0x42 0xff-

-f:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。 -y:默认输入yes,不再询问用户确认。

往某个寄存器里面写入多个数据 往i2c总线4上的0x30设备写入3个byte数据,命令如下:

i2ctransfer -y -f 4 w3@0x30 0x85 0x01 0x10

具体说明如下: 在这里插入图片描述

从某个寄存器里面读取多个数据 往i2c总线4上的0x30设备0x8501寄存器读取3个byte数据,命令如下:

i2ctransfer -y -f 4 w2@0x30 0x85 0x01 r3

具体说明如下: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭